<?php

namespace App\models;

use App\models\Disk;

/**
 *
 */
class DiskForm
{
  private $_disk;
  private $_info;
  private $msg;

  function __construct($token,&$ci)
  {
    $this->_disk = new Disk($ci);
    $this->_info = $this->_disk->getInfo($token);
  }

  public function init()
  {
    $this->msg['code'] = $this->msg['data']['code'] = 200;
    $this->msg['data']['quota'] = $this->_info['quota'];
    $this->msg['data']['used'] = (string)$this->_disk->getUsed($this->_info['disk']);
    $this->msg['data']['rootDir'] = $this->_disk->getRootDir($this->_info['disk']);
    $this->msg['data']['dirs'] = $this->_disk->getDirs($this->_info['disk']);
    $this->msg['data']['list'] = $this->_disk->getNode($this->msg['data']['rootDir']['directory'],$this->_info['disk']);
  }

  public function getNode($parent)
  {
    if ($this->_disk->hasDir($parent)) {
      $this->msg['data']['code'] = $this->msg['code'] = 200;
      $this->msg['data']['list'] = $this->_disk->getNode($parent,$this->_info['disk']);
    }else {
      $this->msg['data']['code'] = $this->msg['code'] = 403;
      $this->msg['data']['error'] = '不存在此目录';
    }
  }

  public function mkdir($parent,$name)
  {
    if ($this->_disk->hasDir($parent)) {
      if ($this->_disk->mkdir($this->_info['disk'],$parent,$name)) {
        $this->msg['data']['code'] = $this->msg['code'] = 200;
        $this->msg['data']['dirs'] = $this->_disk->getDirs($this->_info['disk']);
        $this->msg['data']['list'] = $this->_disk->getNode($parent,$this->_info['disk']);
      }else {
        $this->msg['data']['code'] = $this->msg['code'] = 403;
        $this->msg['data']['error'] = '新增目录失败！';
      }
    }else {
      $this->msg['data']['code'] = $this->msg['code'] = 403;
      $this->msg['data']['error'] = '不存在此目录';
    }
  }

  public function delete($parent,$deletelist)
  {
    $this->_disk->remove($deletelist->dirs,$deletelist->files);
    $this->msg['data']['code'] = $this->msg['code'] = 200;
    $this->msg['data']['dirs'] = $this->_disk->getDirs($this->_info['disk']);
    $this->msg['data']['list'] = $this->_disk->getNode($parent,$this->_info['disk']);
  }

  public function move($parent,$movelist,$to)
  {
    $this->_disk->move($movelist->dirs,$movelist->files,$to[0]);
    $this->msg['data']['code'] = $this->msg['code'] = 200;
    $this->msg['data']['dirs'] = $this->_disk->getDirs($this->_info['disk']);
    $this->msg['data']['list'] = $this->_disk->getNode($parent,$this->_info['disk']);
  }

  public function upload($upload,$parent)
  {
    if ($this->_disk->hasFile($parent,$upload->getClientFilename())) {
      $this->msg['data']['code'] = $this->msg['code'] = 500;
    }else {
      $fdfs = new \FastDFS();
      $tracker = $fdfs->tracker_get_connection();
      $fdfs_id = $fdfs->storage_upload_by_filename1($upload->file);
      if ($fdfs_id) {
         $this->_disk->upload($this->_info['disk'],
         $parent,$upload->getClientFilename(),$upload->getClientMediaType(),$upload->getSize(),$fdfs_id
        );
        $this->msg['data']['msg'] = $fdfs_id;
      }else {
        $this->msg['data']['code'] = $this->msg['code'] = 500;
      }
    }
  }

  public function download($file)
  {
    $url = $this->_disk->getFDFS($file);
    $this->msg['data']['code'] = $this->msg['code'] = 200;
    $this->msg['data']['url'] = $url;
  }

  public function getMessage()
  {
    return $this->msg;
  }
}
